(function () {
  class Animal {
    name: string;
    constructor(name: string) {
      this.name = name;
    }

    sayHello() {
      console.log("大家好，我是个动物");
    }
  }

  class Dog extends Animal {
    type: string;
    constructor(name: string, type: string) {
      // 如果你在子类中写了构造函数，在子类构造函数中必须调用一下父类的构造函数，这时super的作用就体现出来了
      super(name); //调用父类的构造函数
      this.type = type;
    }

    // 在类的方法中，super就代表当前类的父类
    sayHello() {
      // 通过super可以调用到父类实例身上的方法或属性，但是开发中super一般很少用来搞这个
      super.sayHello();
    }
  }

  const dog = new Dog("旺财", "拉布拉多");
  dog.sayHello();
})();
